local coroutine = coroutine

co1 = coroutine.create(
	function (  )
		print('at co1 a  ')
		coroutine.resume(co2)
		print('at co1 b  ')
	end
)

co2 = coroutine.create(
	function (  )
		print('at co2 a  ')
		print('at co2 b  ')
		coroutine.resume(co3)
		print('at co2 c  ')
	end
)

co3 = coroutine.create(
	function (  )
		print('at co3 a  ')
		coroutine.yield(a)
		print('at co3 b  ')
	end
)

coroutine.resume(co1)    --这里启动协程co1
--[[
    at co1 a

    --执行co2
    at co2 a
    at co2 b

    --执行co3
    at co3 a
    at co2 c
    at co1 b
]]
--PS:被暂停的协程不能自己恢复，必须重新调用resume才能继续运行,
--要想让co3后面的代码继续运行，必须再次调用coroutine.resume(co3)

--同一时刻只有一个corutine状态为running
--corutine②在执行时,corutine①的状态是什么?答案是normal
--[[
    还没有开始的corutine状态是suspend
    执行了yield命令的corutine状态也是suspend
    正在执行的corutine状态为running
    执行完毕的corutine状态是dead

    不能对non-suspend的corutine执行resume,

    1 不能对正在执行的corutine(状态为running)resume
    2 不能对状态为normal的corutine执行resume.即上面第二个执行栈中不能执行corutine.resume(co1)
    3 不能对已退出的corutine执行resume
]]